import axios from 'axios'
import store from '@/store'
import { Message } from 'element-cisdi'
import router from '@/router'

// 返回登录页面，并传入回调路由
function redirectLogin () {
  router.push({
    name: 'login',
    query: {
      redirect: router.currentRoute.fullPath
    }
  })
}

const request = axios.create({
  // 配置选项
  // baseURL基本路径、timeout超时
})

// 请求拦截器
request.interceptors.request.use(function (config) {
  // Do something before request is sent
  // 通过修改 config 配置信息来实现业务功能的统一处理
  // 例如这里把store中的token带入header
  // const { user } = store.state
  // if (user && user.access_token) {
  //   config.headers.Authorization = user.access_token
  // }

  // 必须返回 config，否则请求发不出去
  return config
}, function (error) {
  // Do something with request error
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(function (response) {
  // 响应成功 状态码为2xx 会进入这里
  // 如果是自定义状态码，错误处理也会进入这里
  return response
}, async function (error) { // 响应失败 超出2xx状态码 会进入这里
  if (error.response) { // 请求收到响应了，但是状态码超出2xx
    // 常见错误状态码
    // 400 请求参数错误
    // 401 未授权
    // 403 无权限
    // 404 未找到
    // 500 服务器错误
    const { status } = error.response
    if (status === 400) {
      Message.error('请求参数错误')
    } else if (status === 401) {
      // token无效（无token、token无效、token过期）
      // 如果没有 refresh_token 跳转登录页
      console.log(store)
      console.log(redirectLogin)
      // if (!store.state.user) {
      //   redirectLogin()
      //   return Promise.reject(error)
      // }
    } else if (status === 403) {
      Message.error('没有权限，请联系管理员')
    } else if (status === 404) {
      Message.error('请求资源不存在')
    } else if (status >= 500) {
      Message.error('服务端错误，请联系管理员')
    }
  } else if (error.request) { // 请求发出去了，但是没有收到响应 (网络超时，断开)
    Message.error('请求超时，请刷新重试')
  } else { // 设置请求时发生了一些事情，触发了可能未知的错误
    Message.error('请求失败:' + error.message)
  }

  // 把错误对象继续抛出，扔给下一个上一个调用者
  return Promise.reject(error)
})

export default request
